fn main() {
    println!("Hello, world!");
    let p = Point { x: 1, y: 3.0, z: 9 };
    println!("{:#?}", p);
    p.get_x();
    p.get_y();
    p.get_z();
    let p2 = Point {
        x: 1,
        y: 4,
        z: "ss",
    };
    let p3 = p.get_mixup(p2);
    println!("{:#?}", p3);
}
#[derive(Debug)]
struct Point<T, A, K> {
    x: T,
    y: A,
    z: K,
}
/**
 * 范型在结构体方法中的应用
 */
impl<T, A, K> Point<T, A, K> {
    pub fn get_x(&self) -> &T {
        &self.x
    }
    fn get_y(&self) -> &A {
        &self.y
    }
    fn get_z(&self) -> &K {
        &self.z
    }
}
/**
 * 范型混合多个对象的值，结构体的范型和方法的范型是可以不同的。
 */
impl<T, A, K> Point<T, A, K> {
    fn get_mixup<F, D, C>(self, other: Point<F, D, C>) -> Point<D, A, C> {
        Point {
            x: other.y,
            y: self.y,
            z: other.z,
        }
    }
}
